package com.profgj.profgj.scheduled;

import com.profgj.profgj.entity.User;
import com.profgj.profgj.entity.UserNotify;
import com.profgj.profgj.service.UserNotifyService;
import com.profgj.profgj.service.UserService;
import com.profgj.profgj.utils.EmptyUtils;
import com.profgj.profgj.utils.TaskService;
import com.profgj.profgj.vo.TaskMgr;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 定时任务类 检测用户通知上报标志位状态
 */
@Service
public class CheckUserReportFlag {

    /**
     * 用户服务对象
     */
    @Resource
    private UserService userService;

    /**
     * 用户通知服务对象
     */
    @Resource
    private UserNotifyService userNotifyService;

    /**
     * 短信任务发送对象
     */
    @Resource
    private TaskService taskService;

    /**
     * # 检测用户没有上报开始的提示日期
     */
    @Value("${system.task.checkday}")
    private Integer checkDay = null;

    /**
     * 月初1号企业用都初始通知都初始为0, initday初始的日期
     */
    @Value("${system.task.initday}")
    private Integer initDay = null;


    /**
     * 检测用户通知上报标志位状态方法
     * 每天早8,中午12点,下午3点执行一次
     */
    @Scheduled(cron = "${system.task.cron}")
    public void checkUserReportFlagMethod() {
        // 无条件查询所有用户
        List<User> users = userService.queryAll2();
        System.out.println("定时器查询所有用户");
        for (User user: users) {
            // 排除管理员
            if (user.getRoleId() != 1) {
                System.out.println("不是管理员的情况下");
                // 取当前天 几号
                Integer day = Integer.parseInt(new SimpleDateFormat("dd").format(new Date()));
                // 判断当前天是否大于等于26 号 checkDay为26
                if (day >= checkDay) {
                    System.out.println("上报任务检测 大于 26日");
                    // 企业用户id查询用户通知 企业用户只有一条通知
                    UserNotify userNotify = userNotifyService.queryByEnUserId(user.getId());
                    // 查询当前用户的提醒信息为空
                    if (!EmptyUtils.isUserNotifyEmpty(userNotify)) {
                        // 添加记录到数据库
                        UserNotify userNotify1 = new UserNotify();
                        userNotify1.setUserId(user.getId());
                        userNotify1.setMessage("今月您还没有上报数据,请尽快上报");
                        userNotify1.setReport(0);
                        userNotify1.setRead(0);
                        userNotifyService.insert(userNotify1);

                        // 短信提醒
                        TaskMgr task = new TaskMgr();
                        task.setPhoneNumber(user.getTel());
                        task.setContent("今月您还没有上报数据,请尽快上报");
                        taskService.sendMessage(task);
                    }else if (userNotify.getReport() == 0) {
                        // 还有上报数据的情况下
                        System.out.println("今天没有上报进行提醒");
                        userNotify.setMessage("今月您还没有上报数据,请尽快上报");
                        // 更新通知记录
                        userNotifyService.update(userNotify);

                        // 短信提醒
                        TaskMgr task = new TaskMgr();
                        task.setPhoneNumber(user.getTel());
                        task.setContent("今月您还没有上报数据,请尽快上报");
                        taskService.sendMessage(task);
                    }

                    // 判断当天是不是月初1号 initDay为1
                } else if (initDay.equals(day)) {
                    System.out.println("月初1日初始化");
                    // 企业用户id查询用户通知 企业用户只有一条通知
                    UserNotify userNotify = userNotifyService.queryByEnUserId(user.getId());
                    // 查询当前用户的提醒信息为空
                    if (!EmptyUtils.isUserNotifyEmpty(userNotify)) {
                        // 添加记录到数据库
                        UserNotify userNotify1 = new UserNotify();
                        userNotify1.setUserId(user.getId());
                        userNotify1.setMessage("1-26之间随时可以上报数据");
                        userNotify1.setReport(0);
                        userNotify1.setRead(0);
                        userNotifyService.insert(userNotify1);
                    }else {
                        // 月初1号都初始为0标记 未读未上报
                        userNotify.setReport(0);
                        userNotify.setRead(0);
                        userNotify.setMessage("1-26之间随时可以上报数据");
                        // 更新通知记录
                        userNotifyService.update(userNotify);
                    }
                }
            }
        }
    }
}
